Skip to content

Commit

Permalink
Merge pull request #512 from microsoft/pete-dev
Browse files Browse the repository at this point in the history
Customer Preview 1 Updates
  • Loading branch information
Psychlist1972 authored Feb 5, 2025
2 parents 454293b + 98208ed commit eb05de1
Show file tree
Hide file tree
Showing 121 changed files with 3,258 additions and 607 deletions.
47 changes: 14 additions & 33 deletions build/nuke_build/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,15 @@ class Build : NukeBuild
//readonly GitVersion MasterBuildVersion;


string VersionName => "Developer Preview 9";
string NuGetVersionName => "preview-9";
//string VersionName => "Developer Preview 9";
string VersionName => "Customer Preview 1";
string NuGetVersionName => "preview-10";

// we set these here, especially the time, so it's the same for all platforms in the single build

const string BuildVersionMajor = "1";
const string BuildVersionMinor = "0";
const string BuildVersionRevision = "2";
const string BuildVersionRevision = "3";
const string BuildMajorMinorRevision = $"{BuildVersionMajor}.{BuildVersionMinor}.{BuildVersionRevision}";

//string BuildDateNumber = DateTime.Now.ToString("yy") + DateTime.Now.DayOfYear.ToString("000"); // YYddd where ddd is the day number for the year
Expand Down Expand Up @@ -776,20 +777,11 @@ void UpdateSetupBundleInfoIncludeFile(string platform)
{
string solutionDir = MidiSettingsSolutionFolder.ToString() + @"\";

string rid = platform.ToLower() == "arm64" ? "win-arm64" : "win-x64";


//var msbuildProperties = new Dictionary<string, object>();
//msbuildProperties.Add("Platform", platform);
//msbuildProperties.Add("SolutionDir", solutionDir); // to include trailing slash
//msbuildProperties.Add("RuntimeIdentifier", rid);
////msbuildProperties.Add("NoWarn", "MSB3271"); // winmd and dll platform mismatch with Arm64EC

//Console.Out.WriteLine($"----------------------------------------------------------------------");
//Console.Out.WriteLine($"Solution: {solution}");
//Console.Out.WriteLine($"SolutionDir: {solutionDir}");
//Console.Out.WriteLine($"Platform: {platform}");
//Console.Out.WriteLine($"RID: {rid}");
//
// TEMP! The MIDI Settings app is x64 right now due to conflict with WinUI Ro Detours with Arm64
//
//string rid = platform.ToLower() == "arm64" ? "win-arm64" : "win-x64";
string rid = "win-x64";


DotNetTasks.DotNetBuild(_ => _
Expand All @@ -802,17 +794,6 @@ void UpdateSetupBundleInfoIncludeFile(string platform)
.AddNoWarns(8618) // ignore CS8618 which I have no control over because it's in projection assemblies
);

// This just doesn't work. Even in Visual Studio, publishing the WinAppSdk app just fails for "unknown" reasons.
//DotNetTasks.DotNetPublish(_ => _
// .SetProjectFile(MidiSettingsSolutionFolder / "Microsoft.Midi.Settings.csproj" / "Microsoft.Midi.Settings.csproj")
// .SetConfiguration(Configuration.Release)
// .SetPublishSingleFile(false)
// .SetPublishTrimmed(false)
// .SetSelfContained(false)
// .SetRuntime(rid)
//);
// folder is bin\rid\publish\

var settingsOutputFolder = MidiSettingsSolutionFolder / "Microsoft.Midi.Settings" / "bin" / Configuration.Release / "net8.0-windows10.0.22621.0" / rid;
var stagingFolder = MidiSettingsStagingFolder / platform;

Expand All @@ -824,9 +805,7 @@ void UpdateSetupBundleInfoIncludeFile(string platform)
var msftExtensionsFiles = Globbing.GlobFiles(settingsOutputFolder, "Microsoft.Extensions*.dll");
var midiSdkFiles = Globbing.GlobFiles(
settingsOutputFolder,
"Microsoft.Windows.Devices.Midi2.Initialization.dll",
/* "Microsoft.Windows.Devices.Midi2.Initialization.winmd", */
"Microsoft.Windows.Devices.Midi2.Initialization.pri"
"Microsoft.Windows.Devices.Midi2.NetProjection.dll"
);

List<AbsolutePath> paths = new List<AbsolutePath>(toolkitFiles.Count + msftExtensionsFiles.Count + midiSdkFiles.Count + 40);
Expand All @@ -839,7 +818,7 @@ void UpdateSetupBundleInfoIncludeFile(string platform)

paths.Add(settingsOutputFolder / "MidiSettings.exe");
paths.Add(settingsOutputFolder / "MidiSettings.dll");
//paths.Add(settingsOutputFolder / "MidiSettings.exe.manifest");
paths.Add(settingsOutputFolder / "MidiSettings.exe.manifest");
paths.Add(settingsOutputFolder / "MidiSettings.deps.json");
paths.Add(settingsOutputFolder / "MidiSettings.runtimeconfig.json");

Expand All @@ -858,12 +837,14 @@ void UpdateSetupBundleInfoIncludeFile(string platform)

paths.Add(settingsOutputFolder / "Newtonsoft.Json.dll");

//paths.Add(settingsOutputFolder / "System.CodeDom.dll");
paths.Add(settingsOutputFolder / "System.CodeDom.dll");
paths.Add(settingsOutputFolder / "System.Diagnostics.EventLog.dll");
paths.Add(settingsOutputFolder / "System.Diagnostics.EventLog.Messages.dll");
paths.Add(settingsOutputFolder / "System.Management.dll");
paths.Add(settingsOutputFolder / "System.ServiceProcess.ServiceController.dll");

paths.Add(settingsOutputFolder / "System.Text.Json.dll");

paths.Add(settingsOutputFolder / "Microsoft.Web.WebView2.Core.dll");
paths.Add(settingsOutputFolder / "Microsoft.Web.WebView2.Core.Projection.dll");
paths.Add(settingsOutputFolder / "WebView2Loader.dll");
Expand Down
4 changes: 2 additions & 2 deletions build/staging/version/BundleInfo.wxi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Include>
<?define SetupVersionName="Developer Preview 9 Arm64" ?>
<?define SetupVersionNumber="1.0.2-preview-9.250121-1820" ?>
<?define SetupVersionName="Customer Preview 1 Arm64" ?>
<?define SetupVersionNumber="1.0.3-preview-10.250204-1909" ?>
</Include>
10 changes: 5 additions & 5 deletions build/staging/version/WindowsMidiServicesVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ namespace Microsoft.Midi.Common
public static class MidiBuildInformation
{
public const string Source = "GitHub Preview";
public const string Name = "Developer Preview 9";
public const string BuildFullVersion = "1.0.2-preview-9.250121-1820";
public const string Name = "Customer Preview 1";
public const string BuildFullVersion = "1.0.3-preview-10.250204-1909";
public const string VersionMajor = "1";
public const string VersionMinor = "0";
public const string VersionRevision = "2";
public const string VersionDateNumber = "250121";
public const string VersionTimeNumber = "1820";
public const string VersionRevision = "3";
public const string VersionDateNumber = "250204";
public const string VersionTimeNumber = "1909";
}
}

10 changes: 5 additions & 5 deletions build/staging/version/WindowsMidiServicesVersion.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
#define WINDOWS_MIDI_SERVICES_VERSION_INCLUDE

#define WINDOWS_MIDI_SERVICES_BUILD_SOURCE L"GitHub Preview"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_NAME L"Developer Preview 9"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_FULL L"1.0.2-preview-9.250121-1820"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_NAME L"Customer Preview 1"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_FULL L"1.0.3-preview-10.250204-1909"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_MAJOR L"1"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_MINOR L"0"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_REVISION L"2"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_DATE_NUMBER L"250121"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_TIME_NUMBER L"1820"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_REVISION L"3"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_DATE_NUMBER L"250204"
#define WINDOWS_MIDI_SERVICES_BUILD_VERSION_TIME_NUMBER L"1909"

#endif

20 changes: 20 additions & 0 deletions docs/console/endpoints.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,16 @@ There are a number of commands, including those for monitoring and sending messa

In most any command which takes an Endpoint Device Id as a parameter, that parameter is optional. If you leave it out, and the command operates on a single endpoint, you will be prompted with a menu of available endpoints to work with.

![midi endpoint prompt](midi-endpoint-prompt.png)

If you want to script the commands without requiring any user interaction, provide the endpoint device ID as the first parameter after the `endpoint` command. For example:

```
midi endpoint \\?\SWD#MIDISRV#MIDIU_DIAG_LOOPBACK_B#{e7cce071-3c03-423f-88d3-f1045d02552b} properties --verbose
```

![midi endpoint help](midi-endpoint-help.png)

## Get Detailed Endpoint Properties

In the Device Manager in Windows, you can only see a subset of properties for a device. The same goes with the `pnputil` utility. It can be useful to see all of the key properties of a MIDI Endpoint. Therefore, we've baked property reporting right into the MIDI Services Console.
Expand Down Expand Up @@ -52,6 +56,8 @@ Verbose mode:
midi endpoint monitor --verbose
```

![midi endpoint monitor verbose](midi-endpoint-monitor-verbose.png)

### Saving messages to a file

When monitoring, you also have the option to save the messages to a file. This can be used to capture test data which you will send using the `send-message-file` command, or for storing something like a System Exclusive dump.
Expand Down Expand Up @@ -190,6 +196,20 @@ F3345678h 12345678h 86754321h 86753099h
# bunch of empty lines above. And the file ends with a comment
```

## Easily play MIDI 1.0 or MIDI 2.0 Notes

To make it easy to send notes to an endpoint, the play-notes command accepts parameters including the note number and other information, and generates the appropriate channel voice messages at the appropriate times. The `--forever` switch has the messaging sending loop forever, making it useful for testing devices.

```
midi endpoint play-notes 50 55 52 60 72 90 --group 1 --channel 10 --velocity 100 --length 250 --rest 500 --forever
```

The parameters are all described when you type `midi endpoint play-notes --help`

This is not meant to be a sequencer with the kind of timing accuracy you would have in a DAW, but is instead a simple way to play notes on an endpoint.

![Play Notes](midi-endpoint-play-notes.png)

## Sending Endpoint Metadata Requests

The MIDI Services Console also makes it possible to send some common stream request messages without having to remember their exact format.
Expand Down
6 changes: 3 additions & 3 deletions docs/console/midi-console.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ If you have the midi console installed, you can invoke it from any command promp

## Where to Get it

While in developer preview, the Windows MIDI Services console is delivered as part of the developer preview installer. In the future, it will be delivered and serviced through the Microsoft Store on Windows
The Windows MIDI Services console is delivered as part of the SDK Runtime and Tools installer. While in preview, this is available on our [GitHub releases page](https://aka.ms/midireleases).

## General Information

### Commands vs Options

MIDI Console commands are words with no symbol prefix. For example `endpoint` or `send-message-file`. Options are prefixed with two dashes if you use the full word, or a single dash if you use the single-letter abbreviation. For example `--help` or `-h`. There is no statement completion built in to the console, but there are some supported abbreviations for commands. These are not yet fully documented but are present in the Program.cs in the console source code.

### "Ports" vs "Streams"
### "Ports" vs "Endpoints"

In MIDI 1.0, specifically USB MIDI 1.0, a connected device would have a single input and single output stream. Inside that stream are packets of data with virtual cable numbers. Those numbers (16 total at most) identify the "port" the data is going to. Operating systems would then translate those into input and output ports. Those cable numbers were hidden from users.

Expand All @@ -34,7 +34,7 @@ If you want to see the MIDI clock we're using for timestamps and message schedul
midi time
midi clock
```
![MIDI Clock Command](./midi-clock.png)
![MIDI Clock Command](midi-clock.png)

## Technical Information

Expand Down
Binary file added docs/console/midi-endpoint-help.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/console/midi-endpoint-monitor-verbose.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/console/midi-endpoint-play-notes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/console/midi-endpoint-prompt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion samples/cpp-winrt/basics/client-basics-cpp.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.2-preview-9.250121-1820</WindowsMidiServicesSdkPackage>
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.3-preview-10.250204-1909</WindowsMidiServicesSdkPackage>
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>false</CppWinRTGenerateWindowsMetadata>
Expand Down
2 changes: 1 addition & 1 deletion samples/cpp-winrt/basics/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.240405.15" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.2-preview-9.250121-1820" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.3-preview-10.250204-1909" targetFramework="native" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.2-preview-9.250121-1820</WindowsMidiServicesSdkPackage>
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.3-preview-10.250204-1909</WindowsMidiServicesSdkPackage>
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
Expand Down
2 changes: 1 addition & 1 deletion samples/cpp-winrt/loopback-endpoints/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.240405.15" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.2-preview-9.250121-1820" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.3-preview-10.250204-1909" targetFramework="native" />
</packages>
2 changes: 1 addition & 1 deletion samples/cpp-winrt/send-speed/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.240405.15" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.2-preview-9.250121-1820" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.3-preview-10.250204-1909" targetFramework="native" />
</packages>
2 changes: 1 addition & 1 deletion samples/cpp-winrt/send-speed/send-speed-cpp.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.2-preview-9.250121-1820</WindowsMidiServicesSdkPackage>
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.3-preview-10.250204-1909</WindowsMidiServicesSdkPackage>
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
Expand Down
2 changes: 1 addition & 1 deletion samples/cpp-winrt/simple-app-to-app-midi/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.240405.15" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.2-preview-9.250121-1820" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.3-preview-10.250204-1909" targetFramework="native" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.2-preview-9.250121-1820</WindowsMidiServicesSdkPackage>
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.3-preview-10.250204-1909</WindowsMidiServicesSdkPackage>
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
Expand Down
2 changes: 1 addition & 1 deletion samples/cpp-winrt/static-enum-endpoints/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.240405.15" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.2-preview-9.250121-1820" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.3-preview-10.250204-1909" targetFramework="native" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.2-preview-9.250121-1820</WindowsMidiServicesSdkPackage>
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.3-preview-10.250204-1909</WindowsMidiServicesSdkPackage>
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
Expand Down
2 changes: 1 addition & 1 deletion samples/cpp-winrt/watch-endpoints/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Windows.CppWinRT" version="2.0.240405.15" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.2-preview-9.250121-1820" targetFramework="native" />
<package id="Microsoft.Windows.Devices.Midi2" version="1.0.3-preview-10.250204-1909" targetFramework="native" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.240405.15\build\native\Microsoft.Windows.CppWinRT.props')" />
<PropertyGroup Label="Globals">
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.2-preview-9.250121-1820</WindowsMidiServicesSdkPackage>
<WindowsMidiServicesSdkPackage>Microsoft.Windows.Devices.Midi2.1.0.3-preview-10.250204-1909</WindowsMidiServicesSdkPackage>
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
Expand Down
Loading

0 comments on commit eb05de1

Please sign in to comment.