Skip to content

Commit

Permalink
Removed Porposal Attributes from everywhere (#480)
Browse files Browse the repository at this point in the history
* Removed Porposal Attributes from everywhere -- spec 3.16 has been releaseed!

* Moved proposals to correct folder.   Removed extra namespaces.  Added serialization integration for Proposed Capabilities.

* Attributes

* Updated docs slightly

* internals here... internals there...

* Allow logs to fail
  • Loading branch information
david-driscoll authored Dec 16, 2020
1 parent 2055eaa commit 67b73f1
Show file tree
Hide file tree
Showing 128 changed files with 1,067 additions and 476 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,21 @@ jobs:
fail_ci_if_error: 'true'
- name: 🏺 Publish logs
if: always()
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: 'logs'
path: 'artifacts/logs/'
- name: 🏺 Publish coverage data
if: always()
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: 'coverage'
path: 'coverage/'
- name: 🏺 Publish test data
if: always()
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: 'test data'
Expand Down
31 changes: 31 additions & 0 deletions LSP.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{D764E024-3D3F-4112-B932-2DB722A1BACC}"
ProjectSection(SolutionItems) = preProject
src\Directory.Build.props = src\Directory.Build.props
src\Directory.Build.targets = src\Directory.Build.targets
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{2F323ED5-EBF8-45E1-B9D3-C014561B3DDA}"
Expand Down Expand Up @@ -72,6 +73,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dap.Shared", "src\Dap.Share
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestingUtils", "test\TestingUtils\TestingUtils.csproj", "{58E83291-1ED9-4921-A12F-F2450AB17F47}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dap.Protocol.Proposals", "src\Dap.Protocol.Proposals\Dap.Protocol.Proposals.csproj", "{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Protocol.Proposals", "src\Protocol.Proposals\Protocol.Proposals.csproj", "{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -328,6 +333,30 @@ Global
{58E83291-1ED9-4921-A12F-F2450AB17F47}.Release|x64.Build.0 = Release|Any CPU
{58E83291-1ED9-4921-A12F-F2450AB17F47}.Release|x86.ActiveCfg = Release|Any CPU
{58E83291-1ED9-4921-A12F-F2450AB17F47}.Release|x86.Build.0 = Release|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Debug|x64.ActiveCfg = Debug|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Debug|x64.Build.0 = Debug|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Debug|x86.ActiveCfg = Debug|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Debug|x86.Build.0 = Debug|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Release|Any CPU.Build.0 = Release|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Release|x64.ActiveCfg = Release|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Release|x64.Build.0 = Release|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Release|x86.ActiveCfg = Release|Any CPU
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5}.Release|x86.Build.0 = Release|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Debug|x64.ActiveCfg = Debug|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Debug|x64.Build.0 = Debug|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Debug|x86.ActiveCfg = Debug|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Debug|x86.Build.0 = Debug|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Release|Any CPU.Build.0 = Release|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Release|x64.ActiveCfg = Release|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Release|x64.Build.0 = Release|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Release|x86.ActiveCfg = Release|Any CPU
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -354,6 +383,8 @@ Global
{671FFF78-BDD2-4389-B29C-BFD183DA9120} = {2F323ED5-EBF8-45E1-B9D3-C014561B3DDA}
{010D4BE7-6A92-4A04-B4EB-745FA3130DF2} = {D764E024-3D3F-4112-B932-2DB722A1BACC}
{58E83291-1ED9-4921-A12F-F2450AB17F47} = {2F323ED5-EBF8-45E1-B9D3-C014561B3DDA}
{D43637CC-94E6-4ED4-BAA3-E5D1AD3285F5} = {D764E024-3D3F-4112-B932-2DB722A1BACC}
{201B1CA7-AB12-41AD-9246-BC30F2EBE2DF} = {D764E024-3D3F-4112-B932-2DB722A1BACC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D38DD0EC-D095-4BCD-B8AF-2D788AF3B9AE}
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ For more information about using the `DebugAdapterClient` / `DebugAdapterServer`
| ------- | ----- |
| OmniSharp.Extensions.DebugAdapter | [![nuget-version-hefb6om79mfg-badge]![nuget-downloads-hefb6om79mfg-badge]][nuget-hefb6om79mfg] |
| OmniSharp.Extensions.DebugAdapter.Client | [![nuget-version-94qjnkon/cda-badge]![nuget-downloads-94qjnkon/cda-badge]][nuget-94qjnkon/cda] |
| OmniSharp.Extensions.DebugAdapter.Proposals | [![nuget-version-ajdnjvhbx+0w-badge]![nuget-downloads-ajdnjvhbx+0w-badge]][nuget-ajdnjvhbx+0w] |
| OmniSharp.Extensions.DebugAdapter.Server | [![nuget-version-f/4jrt4grmdg-badge]![nuget-downloads-f/4jrt4grmdg-badge]][nuget-f/4jrt4grmdg] |
| OmniSharp.Extensions.DebugAdapter.Shared | [![nuget-version-2fkn0yzdbhmg-badge]![nuget-downloads-2fkn0yzdbhmg-badge]][nuget-2fkn0yzdbhmg] |
| OmniSharp.Extensions.DebugAdapter.Testing | [![nuget-version-jppuysmkpfcw-badge]![nuget-downloads-jppuysmkpfcw-badge]][nuget-jppuysmkpfcw] |
Expand All @@ -62,6 +63,7 @@ For more information about using the `DebugAdapterClient` / `DebugAdapterServer`
| OmniSharp.Extensions.JsonRpc.Testing | [![nuget-version-punkj7/efvjq-badge]![nuget-downloads-punkj7/efvjq-badge]][nuget-punkj7/efvjq] |
| OmniSharp.Extensions.LanguageClient | [![nuget-version-fclou9t/p2ba-badge]![nuget-downloads-fclou9t/p2ba-badge]][nuget-fclou9t/p2ba] |
| OmniSharp.Extensions.LanguageProtocol | [![nuget-version-vddj9t6jnirq-badge]![nuget-downloads-vddj9t6jnirq-badge]][nuget-vddj9t6jnirq] |
| OmniSharp.Extensions.LanguageProtocol.Proposals | [![nuget-version-z5fadevkwpng-badge]![nuget-downloads-z5fadevkwpng-badge]][nuget-z5fadevkwpng] |
| OmniSharp.Extensions.LanguageProtocol.Testing | [![nuget-version-md8c3c/bo/8g-badge]![nuget-downloads-md8c3c/bo/8g-badge]][nuget-md8c3c/bo/8g] |
| OmniSharp.Extensions.LanguageServer | [![nuget-version-fkxlzvrmzpbw-badge]![nuget-downloads-fkxlzvrmzpbw-badge]][nuget-fkxlzvrmzpbw] |
| OmniSharp.Extensions.LanguageServer.Shared | [![nuget-version-4htmykprzq1a-badge]![nuget-downloads-4htmykprzq1a-badge]][nuget-4htmykprzq1a] |
Expand Down Expand Up @@ -107,6 +109,9 @@ This project is supported by the [.NET Foundation](http://www.dotnetfoundation.o
[nuget-94qjnkon/cda]: https://www.nuget.org/packages/OmniSharp.Extensions.DebugAdapter.Client/
[nuget-version-94qjnkon/cda-badge]: https://img.shields.io/nuget/v/OmniSharp.Extensions.DebugAdapter.Client.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
[nuget-downloads-94qjnkon/cda-badge]: https://img.shields.io/nuget/dt/OmniSharp.Extensions.DebugAdapter.Client.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
[nuget-ajdnjvhbx+0w]: https://www.nuget.org/packages/OmniSharp.Extensions.DebugAdapter.Proposals/
[nuget-version-ajdnjvhbx+0w-badge]: https://img.shields.io/nuget/v/OmniSharp.Extensions.DebugAdapter.Proposals.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
[nuget-downloads-ajdnjvhbx+0w-badge]: https://img.shields.io/nuget/dt/OmniSharp.Extensions.DebugAdapter.Proposals.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
[nuget-f/4jrt4grmdg]: https://www.nuget.org/packages/OmniSharp.Extensions.DebugAdapter.Server/
[nuget-version-f/4jrt4grmdg-badge]: https://img.shields.io/nuget/v/OmniSharp.Extensions.DebugAdapter.Server.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
[nuget-downloads-f/4jrt4grmdg-badge]: https://img.shields.io/nuget/dt/OmniSharp.Extensions.DebugAdapter.Server.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
Expand All @@ -131,6 +136,9 @@ This project is supported by the [.NET Foundation](http://www.dotnetfoundation.o
[nuget-vddj9t6jnirq]: https://www.nuget.org/packages/OmniSharp.Extensions.LanguageProtocol/
[nuget-version-vddj9t6jnirq-badge]: https://img.shields.io/nuget/v/OmniSharp.Extensions.LanguageProtocol.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
[nuget-downloads-vddj9t6jnirq-badge]: https://img.shields.io/nuget/dt/OmniSharp.Extensions.LanguageProtocol.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
[nuget-z5fadevkwpng]: https://www.nuget.org/packages/OmniSharp.Extensions.LanguageProtocol.Proposals/
[nuget-version-z5fadevkwpng-badge]: https://img.shields.io/nuget/v/OmniSharp.Extensions.LanguageProtocol.Proposals.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
[nuget-downloads-z5fadevkwpng-badge]: https://img.shields.io/nuget/dt/OmniSharp.Extensions.LanguageProtocol.Proposals.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
[nuget-md8c3c/bo/8g]: https://www.nuget.org/packages/OmniSharp.Extensions.LanguageProtocol.Testing/
[nuget-version-md8c3c/bo/8g-badge]: https://img.shields.io/nuget/v/OmniSharp.Extensions.LanguageProtocol.Testing.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
[nuget-downloads-md8c3c/bo/8g-badge]: https://img.shields.io/nuget/dt/OmniSharp.Extensions.LanguageProtocol.Testing.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
Expand Down
5 changes: 5 additions & 0 deletions docs/lsp.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,8 @@ NOTE: Scoped configuration must be disposed otherwise it will continue to be upd

### Injecting `ILanguageServer` / `ILanguageClient`
You cannot inject `ILanguageServer` or `ILanguageClient` in your handlers (or their services!) because handlers are resolved as part of their initialization. However you can inject `ILanguageServerFacade` or `ILanguageClientFacade`. The should have all the information you're looking for from the core types.

## Language Proposals
The protocol periodically goes through revisions to add new features and properties to the specification. We publish these proposals in the Proposals nuget package. Due to the nature of these proposals they can/will change regularly, do not expect these to be stable until the next version of the spec is released. Our goal is for full fidelity and to ensure these proposals can be tested and vetted as thoroughly as possible.

By registering a proposed feature as a handler it should enable itself with any significant changes. However you can call the `EnableProposals()` method on the server or client options to ensure that the proposed Capabilities are serialized as the corresponding capabilities object. This means you can cast `WorkspaceClientCapabilities` as `ProposedWorkspaceClientCapabilities` safely and see the capabilities that may be provided by the client or server.
4 changes: 2 additions & 2 deletions sample/SampleServer/SemanticTokensHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
using Microsoft.Extensions.Logging;
using OmniSharp.Extensions.LanguageServer.Protocol;
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
using OmniSharp.Extensions.LanguageServer.Protocol.Document.Proposals;
using OmniSharp.Extensions.LanguageServer.Protocol.Document;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals;

namespace SampleServer
{
Expand Down
13 changes: 9 additions & 4 deletions src/Client/Client.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\JsonRpc\JsonRpc.csproj" />
<ProjectReference Include="..\Protocol\Protocol.csproj" />
<ProjectReference Include="..\Shared\Shared.csproj" />
<PackageReference Include="Microsoft.Extensions.Configuration" />
<ProjectReference Include="..\JsonRpc\JsonRpc.csproj"/>
<ProjectReference Include="..\Protocol\Protocol.csproj"/>
<ProjectReference Include="..\Shared\Shared.csproj"/>
<PackageReference Include="Microsoft.Extensions.Configuration"/>
</ItemGroup>
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>OmniSharp.Extensions.LanguageProtocol.Testing, PublicKey=0024000004800000940000000602000000240000525341310004000001000100391db875e68eb4bfef49ce14313b9e13f2cd3cc89eb273bbe6c11a55044c7d4f566cf092e1c77ef9e7c75b1496ae7f95d925938f5a01793dd8d9f99ae0a7595779b71b971287d7d7b5960d052078d14f5ce1a85ea5c9fb2f59ac735ff7bc215cab469b7c3486006860bad6f4c3b5204ea2f28dd4e1d05e2cca462cfd593b9f9f</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
</Project>
9 changes: 5 additions & 4 deletions src/Client/LanguageClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ InstanceHasStarted instanceHasStarted
{
_connection = connection;
_capabilities = capabilities;
_clientCapabilities = clientCapabilities;
_clientCapabilities = serializer.DeserializeObject<ClientCapabilities>(serializer.SerializeObject(clientCapabilities));
_clientInfo = clientInfo;
_receiver = lspClientReceiver;
_textDocumentIdentifiers = textDocumentIdentifiers;
Expand Down Expand Up @@ -307,10 +307,11 @@ await LanguageProtocolEventingHelper.Run(

private void RegisterCapabilities(ClientCapabilities capabilities)
{
capabilities.Window ??= new WindowClientCapabilities();
capabilities.General ??= _serializer.DeserializeObject<GeneralClientCapabilities>("{}");
capabilities.Window ??= _serializer.DeserializeObject<WindowClientCapabilities>("{}");
capabilities.Window.WorkDoneProgress = _collection.ContainsHandler(typeof(IProgressHandler));

capabilities.Workspace ??= new WorkspaceClientCapabilities();
capabilities.Workspace ??= _serializer.DeserializeObject<WorkspaceClientCapabilities>("{}");
capabilities.Workspace.Configuration = _collection.ContainsHandler(typeof(IConfigurationHandler));
capabilities.Workspace.Symbol = UseOrTryAndFindCapability(capabilities.Workspace.Symbol);
capabilities.Workspace.ExecuteCommand = UseOrTryAndFindCapability(capabilities.Workspace.ExecuteCommand);
Expand All @@ -322,7 +323,7 @@ private void RegisterCapabilities(ClientCapabilities capabilities)
capabilities.Workspace.DidChangeWatchedFiles =
UseOrTryAndFindCapability(capabilities.Workspace.DidChangeWatchedFiles);

capabilities.TextDocument ??= new TextDocumentClientCapabilities();
capabilities.TextDocument ??= _serializer.DeserializeObject<TextDocumentClientCapabilities>("{}");
capabilities.TextDocument.Synchronization =
UseOrTryAndFindCapability(capabilities.TextDocument.Synchronization);
capabilities.TextDocument.Completion = UseOrTryAndFindCapability(capabilities.TextDocument.Completion);
Expand Down
8 changes: 3 additions & 5 deletions src/Client/LanguageClientOptionsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,19 @@
using OmniSharp.Extensions.LanguageServer.Protocol.Client;
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization;

namespace OmniSharp.Extensions.LanguageServer.Client
{
public static class LanguageClientOptionsExtensions
{
public static LanguageClientOptions WithSerializer(this LanguageClientOptions options, ISerializer serializer)
public static LanguageClientOptions WithSerializer(this LanguageClientOptions options, LspSerializer serializer)
{
options.Serializer = serializer;
return options;
}

public static LanguageClientOptions WithReceiver(
this LanguageClientOptions options,
IReceiver serverReceiver
)
public static LanguageClientOptions WithReceiver(this LanguageClientOptions options, IReceiver serverReceiver)
{
options.Services.AddSingleton(serverReceiver);
return options;
Expand Down
1 change: 1 addition & 0 deletions src/Client/LanguageClientServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public static class LanguageClientServiceCollectionExtensions
{
internal static IContainer AddLanguageClientInternals(this IContainer container, LanguageClientOptions options, IServiceProvider? outerServiceProvider)
{
options.WithAssemblies(typeof(LanguageClientServiceCollectionExtensions).Assembly, typeof(LspRequestRouter).Assembly);
container = container.AddLanguageProtocolInternals(options);

container.RegisterInstance(options.ClientCapabilities);
Expand Down
7 changes: 6 additions & 1 deletion src/Dap.Client/Dap.Client.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Dap.Shared\Dap.Shared.csproj" />
<ProjectReference Include="..\Dap.Shared\Dap.Shared.csproj"/>
</ItemGroup>
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>OmniSharp.Extensions.DebugAdapter.Testing, PublicKey=0024000004800000940000000602000000240000525341310004000001000100391db875e68eb4bfef49ce14313b9e13f2cd3cc89eb273bbe6c11a55044c7d4f566cf092e1c77ef9e7c75b1496ae7f95d925938f5a01793dd8d9f99ae0a7595779b71b971287d7d7b5960d052078d14f5ce1a85ea5c9fb2f59ac735ff7bc215cab469b7c3486006860bad6f4c3b5204ea2f28dd4e1d05e2cca462cfd593b9f9f</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
</Project>
18 changes: 18 additions & 0 deletions src/Dap.Protocol.Proposals/Dap.Protocol.Proposals.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.1;netstandard2.0</TargetFrameworks>
<PlatformTarget>AnyCPU</PlatformTarget>
<AssemblyName>OmniSharp.Extensions.DebugAdapter.Proposals</AssemblyName>
<RootNamespace>OmniSharp.Extensions.DebugAdapter.Protocol</RootNamespace>
<PackageDescription>Proposed Debug Adapter Protocol models, classes, interfaces and helper methods, that may or may not make it into the final spec</PackageDescription>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Dap.Protocol\Dap.Protocol.csproj"/>
</ItemGroup>
</Project>
Loading

0 comments on commit 67b73f1

Please sign in to comment.